// import com.alibaba.druid.sql.ast.SQLExpr_ptr;
// import com.alibaba.druid.sql.ast.SQLName_ptr;
// import com.alibaba.druid.sql.ast.SQLObject;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"
#include "SQLCreateStatement.h"

class SQLCreateSequenceStatement : public SQLStatementImpl, virtual public SQLCreateStatement
{
public:
  SQLName_ptr name;

  SQLExpr_ptr startWith;
  SQLExpr_ptr incrementBy;
  SQLExpr_ptr minValue;
  SQLExpr_ptr maxValue;
  BOOL_ptr noMaxValue;
  BOOL_ptr noMinValue;
  BOOL_ptr withCache;
  BOOL_ptr cycle;
  BOOL_ptr cache;
  SQLExpr_ptr cacheValue;
  BOOL_ptr order;

  // for drds
  BOOL_ptr simple;
  BOOL_ptr group;
  BOOL_ptr time;

  SQLExpr_ptr unitCount;
  SQLExpr_ptr unitIndex;

  SQLExpr_ptr step;

  SQLCreateSequenceStatement();
  SHAREDOBJECT(SQLCreateSequenceStatement);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  // @Override
  SQLObject_list_ptr getChildren();

  SQLName_ptr getName();

  void setName(SQLName_ptr name);

  SQLExpr_ptr getStartWith();

  void setStartWith(SQLExpr_ptr startWith);

  SQLExpr_ptr getIncrementBy();

  void setIncrementBy(SQLExpr_ptr incrementBy);

  SQLExpr_ptr getMaxValue();

  void setMaxValue(SQLExpr_ptr maxValue);

  BOOL_ptr getCycle();

  void setCycle(BOOL_ptr cycle);

  BOOL_ptr getCache();

  void setCache(BOOL_ptr cache);

  BOOL_ptr getOrder();

  void setOrder(BOOL_ptr order);

  SQLExpr_ptr getMinValue();

  void setMinValue(SQLExpr_ptr minValue);

  BOOL_ptr isNoMaxValue();

  void setNoMaxValue(BOOL_ptr noMaxValue);

  BOOL_ptr isNoMinValue();

  void setNoMinValue(BOOL_ptr noMinValue);

  string_ptr getSchema();

  SQLExpr_ptr getCacheValue();

  void setCacheValue(SQLExpr_ptr cacheValue);

  BOOL_ptr isSimple();

  void setSimple(BOOL_ptr simple);

  BOOL_ptr isGroup();

  void setGroup(BOOL_ptr group);

  SQLExpr_ptr getUnitCount();

  void setUnitCount(SQLExpr_ptr x);

  SQLExpr_ptr getUnitIndex();

  void setUnitIndex(SQLExpr_ptr x);

  BOOL_ptr isTime();

  void setTime(BOOL_ptr time);

  BOOL_ptr getWithCache();

  void setWithCache(BOOL_ptr withCache);

  SQLExpr_ptr getStep();

  void setStep(SQLExpr_ptr step);

  // @Override
  DDLObjectType getDDLObjectType();
};
